﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.ObjectModel;

namespace System.Windows.Media.Media3D10
{
    /// <summary>
    /// Représente une collection ordonnée d'objets <see cref="EffectParameter"/>. 
    /// </summary>
    public class EffectParameterCollection : Collection<EffectParameter>
    {
        private SlimDX.Direct3D10.Effect _effect;

        internal void SetEffect(SlimDX.Direct3D10.Effect effect)
        {
            this._effect = effect;
            foreach (IEffectDependant item in this)
            {
                item.InitEffect(effect);
            }
        }

        /// <summary>
        /// Insère un élément dans <see cref="Collection{T}"/> à l'index spécifié.
        /// </summary>
        /// <param name="index">Index de base zéro auquel <paramref name="item"/> doit être inséré.</param>
        /// <param name="item">Objet à insérer.La valeur peut être null pour les types référence.</param>
        protected override void InsertItem(int index, EffectParameter item)
        {
            if (object.ReferenceEquals(item, null))
                throw new ArgumentNullException("item");
            base.InsertItem(index, item);
            ((IEffectDependant)item).InitEffect(this._effect);
        }

        /// <summary>
        /// Remplace l'élément au niveau de l'index spécifié.
        /// </summary>
        /// <param name="index">Index de base zéro de l'élément à remplacer.</param>
        /// <param name="item">Nouvelle valeur de l'élément à l'index spécifié.La valeur peut être null pour les types référence.</param>
        protected override void SetItem(int index, EffectParameter item)
        {
            if (object.ReferenceEquals(item, null))
                throw new ArgumentNullException("item");
            base.SetItem(index, item);
            ((IEffectDependant)item).InitEffect(this._effect);
        }
    }
}
